package com.radar.io.radar346;

import com.radar.utils.BitConverter;

import java.nio.ByteBuffer;

public class DataParser {

    public static void parSTI(byte[] bytes , Integer index ){


        int storm = BitConverter.toInt32(bytes, index);   //第二个数据   //包含的 Storm 的个数
        index+=4 ;
        long 暴体的序号 = readUnsignedInt(bytes, index); // 所属风暴体的序号
        index+=4 ;
        long 属体扫的序号 = readUnsignedInt(bytes, index);  //所属体扫的序号
        index+=4 ;
        //  String 是否新的风暴体 = getXx(bytes, 1, index);   //是否新的风暴体
        index+=1 ;
        long 据偏移 =readUnsignedInt(bytes, index);  // 件数据偏移
        index+=4 ;
        long 风暴分量个数 = readUnsignedInt(bytes, index);  // 包含风暴分量个数
        index+=4 ;
        short  风暴体序列号 =  BitConverter.toShort16(bytes,index);  //风暴体序列号
        index+=2 ;
        float  最低仰角 =readFloat(bytes, index);  // 风暴体对应的最低仰角，度
        index+=4 ;
        float  最高仰角 =readFloat(bytes, index);  // 风暴体对应的最高仰角，度
        index+=4 ;
        float  顶高 =readFloat(bytes, index);  // 风暴体的顶高,km
        index+=4 ;
        float  底高 =readFloat(bytes, index);  // 风暴体的底高,km
        index+=4 ;
        float  权重中心所在的高度 =readFloat(bytes, index);  // 风暴体质量权重中心所在的高度,km
        index+=4 ;
        float  权重中心所在的距离 =readFloat(bytes, index);  //风暴体质量权重中心所在的距离,km
        index+=4 ;
        float  方位角 =readFloat(bytes, index);  //风暴体质量权重中心方位角
        index+=4 ;
        float  x轴 =readFloat(bytes, index);  //风暴体质量权重中心x轴
        index+=4 ;
        float  y轴 =readFloat(bytes, index);  //风暴体质量权重中心Y轴
        index+=4 ;
        float  权重体积 =readFloat(bytes, index);  //风暴体质量权重体积
        index+=4 ;
        float  含水量 =readFloat(bytes, index);  //风暴体对应的垂直累积液态含水量
        index+=4 ;
        float  最大反射率 =readFloat(bytes, index);  //最大反射率
        index+=4 ;
        float  最大反射率对应的高度 =readFloat(bytes, index);  //最大反射率对应的高度
        index+=4 ;
        float  风暴体的移速 =readFloat(bytes, index);  //风暴体的移速,m/s
        index+=4 ;
        float  风暴体的移向 =readFloat(bytes, index);  //风暴体的移向,度
        index+=4 ;
        float  前一次体扫时风暴体的中心方位 =readFloat(bytes, index);  //前一次体扫时风暴体的中心方位，度
        index+=4 ;
        float  前一次体扫时风暴体的中心距离 =readFloat(bytes, index);  //前一次体扫时风暴体的中心距离，km
        index+=4 ;
        //备份
        index+=4 ;  //
        //备份
        index+=4 ;
        float  前一个体扫风暴中的序号 =readFloat(bytes, index); //与前一个体扫匹配的风暴体在前一个体扫风暴中的序号
        index+=4 ;
        float  风暴现在的中心方位 =readFloat(bytes, index); //风暴现在的中心方位，度
        index+=4 ;
        float  风暴现在的中心距离 =readFloat(bytes, index); //风暴现在的中心距离，km
        index+=4 ;
        float  当前体扫风暴中的序号 =readFloat(bytes, index); //当前体扫时匹配的风暴体在当前体扫风暴中的序号    //31的数据
        index+=4 ;


    }





    public static long readUnsignedInt(byte[] bytes, int index) {
        if (bytes.length - index < 4) {
            throw new IllegalArgumentException(
                    "The length of the byte array must be at least 4 bytes for unsigned int.");
        }

        ByteBuffer buffer = ByteBuffer.wrap(bytes, index, 4);
        return buffer.getInt() & 0xFFFFFFFFL;
    }


    public static long readTm(byte[] bytes, int index) {
        if (bytes.length - index < 18) {
            throw new IllegalArgumentException(
                    "The length of the byte array must be at least 18 bytes for tm.");
        }

        ByteBuffer buffer = ByteBuffer.wrap(bytes, index, 18);
        return buffer.getLong();
    }


    public static float readFloat(byte[] bytes, int index) {
        if (bytes.length - index < 4) {
            throw new IllegalArgumentException(
                    "The length of the byte array must be at least 4 bytes for float.");
        }

        ByteBuffer buffer = ByteBuffer.wrap(bytes, index, 4);
        return buffer.getFloat();
    }
}
